-- card: 26986 from stack: in -- bmap block id: 27170 -- flags: 0000 -- background id: 2135 -- name: Diamond -- part 1 (field) -- low flags: 00 -- high flags: 0000 -- rect: left=11 top=60 right=321 bottom=261 -- title width / last selected line: 0 -- icon id / first selected line: 0 / 0 -- text alignment: 0 -- font id: 2 -- text size: 10 -- style flags: 0 -- line height: 13 -- part name: -- part 2 (field) -- low flags: 00 -- high flags: 0000 -- rect: left=262 top=60 right=334 bottom=508 -- title width / last selected line: 0 -- icon id / first selected line: 0 / 0 -- text alignment: 0 -- font id: 2 -- text size: 10 -- style flags: 0 -- line height: 13 -- part name: -- part contents for background part 1 ----- text ----- 26 -- part contents for card part 2 ----- text ----- inGoAway: wObj.GoAway; end; { of windowCode. } end; { of otherwise. } end; { of case windowCode. } end; And now for the bonus. The TError class came as a result of the need to provide a standard way to report to the user that an error had occurred. No matter how well a program is written, there is always a chance that something unexpected and beyond program control will happen. The TError class of objects are able to check to see if errors during the allocation of handles and pointers occurred. It is also used to report a specific error condition. If there was an -- part contents for card part 1 ----- text ----- wObj := TWindow(GetWRefCon(theWindow)); case windowCode of inZoomIn, inZoomOut: if TrackBox(theWindow, eRecord.where, windowCode) then wObj.Zoom; inGrow: wObj.Grow; inDrag: wObj.Drag; inContent: if (th Window <> FrontWindow) then wObj.Select else begin GlobalToLocal(eRecord.where); wObj.DoInContent(eRecord); end;